package cn.kinoko.mapper.manga;


import cn.kinoko.model.manga.entity.Manga;
import cn.kinoko.model.manga.query.MangaQuery;
import cn.kinoko.model.manga.vo.MangaCoverVO;
import cn.kinoko.model.manga.vo.MangaVO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDate;
import java.util.List;

/**
 * @author xxx
 */
public interface MangaMapper extends BaseMapper<Manga> {

    /**
     * 根据汉化组id热度前5的漫画
     *
     * @param tId 汉化组id
     * @return 热度前5的漫画
     */
    List<MangaCoverVO> queryTop5MangaByTid(@Param("tId") Long tId);

    /**
     * 分页查询 - 我参与的漫画
     *
     * @param page 分页参数
     * @param query 查询参数
     * @return 分页结果
     */
    Page<MangaVO> queryMineMangaPage(Page<Manga> page, @Param("query") MangaQuery query);

    /**
     * 查询年份前10热度的漫画
     *
     * @param year 年份
     * @return 漫画列表
     */
    List<MangaVO> top10MangaByYear(int year);

    /**
     * 查询月份前10热度的漫画
     *
     * @param month 月份
     * @return 漫画列表
     */
    List<MangaVO> top10MangaByMonth(int month);

    /**
     * 查询周前10热度的漫画
     *
     * @param week 周
     * @return 漫画列表
     */
    List<MangaVO> top10MangaByWeek(int week);

    /**
     * 查询月份更新频率前10的漫画
     *
     * @param month 月份
     * @return 漫画列表
     */
    List<MangaVO> top10UpdateMangaByMonth(int month);

    /**
     * 查询周更新频率前10的漫画
     *
     * @param week 周
     * @return 漫画列表
     */
    List<MangaVO> top10UpdateMangaByWeek(int week);

    /**
     * 查询日期更新频率前10的漫画
     *
     * @param date 日期
     * @return 漫画列表
     */
    List<MangaVO> top10UpdateMangaByDate(LocalDate date);

    /**
     * 同步漫画热度
     */
    void syncMangaHeat();
}